/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function(nums, target) {
    if(nums.length===0){
        return [-1,-1];
    }
    if(nums.length===1){
        if(nums[0]===target)return [0,0];
        else return [-1,-1];
    }
    if(nums.length===2){
        if(nums[0]===nums[1]){
            if(nums[0]===target)
                return [0,1];
            else
                return [-1,-1];
        }
        if(nums[0]===target){
            return [0,0];
        }
        if(nums[1]===target){
            return [1,1];
        }
        return [-1,-1];
    }

    let i=0, j=nums.length-1;
    while(i<j-1){
        let m = (i+j)/2 | 0;
        //console.log(i,j,m);
        if(nums[m]<target){
            i = m;
        }
        else if(nums[m]>target){
            j = m;
        }else{
            i = j = m;
            break;
        }
    }
    //console.log("out",i,j);
    if(i!=j){
        if(nums[j]===target){
            i=j;
        }else if(nums[i]===target){
            j=i;
        }else{
            return [-1,-1];
        }
    }
    while(nums[i]===target){
        i--;
    }
    while(nums[j]===target){
        j++;
    }
    i++;
    j--;
    return [i,j];
};

console.log(searchRange([1,2,3],1));